package com.zhao.leetcode.arr.medium;

import java.util.Arrays;

/**
 * @program: arithmetic-do-exercise
 * @author: zhaohuan
 * @create: 2025-06-29 11:32
 * @description
 *
 * 地址：https://leetcode.cn/problems/number-of-subsequences-that-satisfy-the-given-sum-condition/description/?envType=daily-question&envId=2025-06-29
 *
 *  1498. 满足条件的子序列数目
 *
 * 给你一个整数数组 nums 和一个整数 target 。
 *
 * 请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。
 *
 * 由于答案可能很大，请将结果对 109 + 7 取余后返回。
 *
 * 示例 1：
 *
 * 输入：nums = [3,5,6,7], target = 9
 * 输出：4
 * 解释：有 4 个子序列满足该条件。
 * [3] -> 最小元素 + 最大元素 <= target (3 + 3 <= 9)
 * [3,5] -> (3 + 5 <= 9)
 * [3,5,6] -> (3 + 6 <= 9)
 * [3,6] -> (3 + 6 <= 9)
 * 示例 2：
 *
 * 输入：nums = [3,3,6,8], target = 10
 * 输出：6
 * 解释：有 6 个子序列满足该条件。（nums 中可以有重复数字）
 * [3] , [3] , [3,3], [3,6] , [3,6] , [3,3,6]
 * 示例 3：
 *
 * 输入：nums = [2,3,3,4,6,7], target = 12
 * 输出：61
 * 解释：共有 63 个非空子序列，其中 2 个不满足条件（[6,7], [7]）
 * 有效序列总数为（63 - 2 = 61）
 *
 *
 **/
public class ConditionMaxNum {

    public static void main(String[] args) {
        System.out.println(numSubseq(new int[]{2,3,3,4,6,7}, 12));
    }

    public static int numSubseq(int[] nums, int target) {

        long result = 0;
        java.util.Arrays.sort(nums);
        for (int j = 0; j < nums.length; j ++) {
            System.out.println(result);
            for (int k = j; k < nums.length; k ++) {
                if (nums[j] + nums[k] <= target) {
                    result += addSum(k - j);
                }
            }
        }

        return (int) (result % 1000000007);
    }

    private static long addSum(int num) {
        if (num <= 1) {
            return 1;
        }
        num = num - 1;
        int result = 1;
        for (int i = 1; i <= num; i ++) {
            result += addSum(num - i + 1);
        }
        return result;

    }

}
